package br.com.esporte.apresentacao.infra.componente.itemTime;

import java.util.List;

import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.resource.PackageResourceReference;

import br.com.esporte.apresentacao.infra.componente.ComponenteGenerico;
import br.com.esporte.negocios.entidade.imp.Advertencia;
import br.com.esporte.negocios.entidade.imp.Jogador;
import br.com.esporte.negocios.entidade.imp.Ponto;
import br.com.esporte.negocios.entidade.imp.Usuario;
import br.com.esporte.negocios.entidade.util.TipoAdvertenciaEnum;

/**
 * 
 * @author Milton Domingues
 *
 */
public class ItemJogadorTime extends ComponenteGenerico{

	private static final long serialVersionUID = 1L;

	private Jogador jogador;

	public ItemJogadorTime(String id, Jogador jogador) {
		super(id);
		this.setJogador(jogador);
		this.montarComponente();
	}

	private WebMarkupContainer criarCartaoAmarelo(){
		WebMarkupContainer amarelo = new WebMarkupContainer("amarelo");
		if(!this.getTipoCartao(TipoAdvertenciaEnum.AMARELO, this.jogador.getAdvertencias())){
			amarelo.add(new SimpleAttributeModifier("class", "amarelo cartao"));
		}else{
			amarelo.add(new SimpleAttributeModifier("class", "amarelo-select cartao"));
		}
		return amarelo;
	}

	private WebMarkupContainer criarCartaoAzul(){
		WebMarkupContainer azul = new WebMarkupContainer("azul");
		if(!this.getTipoCartao(TipoAdvertenciaEnum.AZUL, this.jogador.getAdvertencias())){
			azul.add(new SimpleAttributeModifier("class", "azul cartao"));
		}else{
			azul.add(new SimpleAttributeModifier("class", "azul-select cartao"));
		}
		return azul;
	}

	private WebMarkupContainer criarCartaoVermelho(){
		WebMarkupContainer vermelho = new WebMarkupContainer("vermelho");
		if(!this.getTipoCartao(TipoAdvertenciaEnum.VERMELHO, this.jogador.getAdvertencias())){
			vermelho.add(new SimpleAttributeModifier("class", "vermelho cartao"));
		}else{
			vermelho.add(new SimpleAttributeModifier("class", "vermelho-select cartao"));
		}
		return vermelho;
	}

	private String getGols(){
		String gols = "";
		Ponto ponto = this.jogador.getPonto();
		if((ponto != null) && (ponto.getQuantidade() != null)){
			gols = String.valueOf(ponto.getQuantidade());
		}
		return gols;
	}

	public Jogador getJogador() {
		return this.jogador;
	}

	private String getNome(){
		String nome = "Nome do Jogador";
		Usuario usuario = this.jogador.getUsuario();
		if((usuario != null) && (usuario.getNome() != null)){
			nome = usuario.getNome();
		}
		return nome;
	}

	private boolean getTipoCartao(TipoAdvertenciaEnum tipo, List<Advertencia> advertencias){
		boolean tipoCorreto = false;
		if(advertencias != null){
			for (Advertencia advertencia : advertencias) {
				if((advertencia.getTipoAdvertencia() != null) && advertencia.getTipoAdvertencia().equals(tipo)){
					tipoCorreto = true;
				}
			}
		}
		return tipoCorreto;
	}

	@Override
	public void montarComponente() {
		this.add(new Label("nome", this.getNome()));
		this.add(new Label("gols", this.getGols()));
		this.add(this.criarCartaoAzul());
		this.add(this.criarCartaoAmarelo());
		this.add(this.criarCartaoVermelho());
	}

	/**
	 * Css do componente
	 */
	@Override
	public void renderHead(IHeaderResponse response) {
		response.renderCSSReference(new PackageResourceReference(ItemJogadorTime.class, "css/ItemJogadorTime.css"));
	}

	public void setJogador(Jogador jogador) {
		this.jogador = jogador;
	}
}
